module demodulate_2FSK(clk,rst , x, y);
 
input clk, rst;//时钟周期信号与复位信号
input y;       //输入调制信号
output reg x;  //输出解调信号
reg clk1;
reg temp;      //比较器，temp变量
reg [3:0] cnt1;//计数器，cnt1
reg [3:0] cnt2;//20分频计数器，cnt2
	
//计数器，cnt1计数变量：记录clk下调制信号‘0’电平个数
always@(posedge clk or negedge rst)
begin
	if(!rst)
		cnt1 <= 0;
	else
		begin 
			if(!y)
				cnt1 <= cnt1 + 1;
			else
				cnt1 <= 0;
		end
end
	
//比较器，temp变量：记录‘0’电平个数大于6的数量，采样
always@(posedge clk or negedge rst)
begin 
	if(!rst)
		temp <= 0;
	else
		begin 
			if(cnt1 > 6)	//若clk时钟下调制信号中的‘1’电平个数大于6
				temp <=	1;	//temp置为‘1’
			else
				temp <=	0;
		end
end
	
//20分频作为采样频率
always@(posedge clk or negedge rst)
begin 
	if(!rst)
		begin
			cnt2 <= 0;
			clk1 <= 0;
		end
	else
		begin
			if(cnt2 == 9)
				begin 
					clk1 <= ~clk1;
					cnt2 <= 0;
				end
			else
					cnt2 <= cnt2 + 1;
		end
end
		
//调制信号是在clk1的上升沿下的temp状态	
always@(posedge clk1 or negedge rst)
begin
	if(!rst)
		x <= 0;
	else
		x <= temp;
end	
endmodule